#include<string>
#include<iostream>
#include "class_learn.h"

struct Date
{
    int year {};
    int month {};
    int day {};

    void print() const { // const修饰的类型，在访问内部方法时，内部方法需要使用const修饰
        std::cout << year << "/" << month << "/" << day << std::endl;
    }

    void non_const_print() {
        std::cout << year << "/" << month << "/" << day << std::endl;
    }
};

void dosomething(const Date& date) {
    // date.non_const_print(); // 编译时会报错，date是const修饰的实例，不能调用非const修饰的成员函数
    date.print();
}

void class_const() {
    const Date today {2020, 1, 1}; // const修饰类必须要进行初始化
    today.print(); // const修饰的类型，在访问内部方法时，内部方法需要使用const修饰

    Date today2 {2020, 1, 1};
    today2.print(); // 普通类实例既可以访问const修饰的成员函数，也可以访问非const修饰的成员函数

    // dosomething(today2); 
}